import esbuild from "esbuild";
import process from "process";
import builtins from "builtin-modules";
import inlineWorkerPlugin from "esbuild-plugin-inline-worker";
import {wasmLoader} from "esbuild-plugin-wasm";

const banner =
`/*
THIS IS A GENERATED/BUNDLED FILE BY ESBUILD
if you want to view the source, please visit the github repository of this plugin
*/
`;

const prod = (process.argv[2] === "production");

const context = await esbuild.context({
	bundle: true,
	logLevel: "info",
	platform: "node",
	target: ['node10.4'],
	format: "cjs",
	banner: {
		js: banner,
	},
	entryPoints: ["main.ts"],
	bundle: true,
	external: [
		"obsidian",
		"electron",
		"@codemirror/autocomplete",
		"@codemirror/collab",
		"@codemirror/commands",
		"@codemirror/language",
		"@codemirror/lint",
		"@codemirror/search",
		"@codemirror/state",
		"@codemirror/view",
		"@lezer/common",
		"@lezer/highlight",
		"@lezer/lr",
		...builtins],
	outfile: "main.js",
	plugins: [
		inlineWorkerPlugin(
			{
				bundle: true,
				target: ['node10.4'],
				platform: "node",
				format: "cjs",
				plugins: [wasmLoader({mode: "embedded"})],
			}),
			wasmLoader({mode: "embedded"})
],
});

if (prod) {
	await context.rebuild();
	process.exit(0);
} else {
	await context.watch();
}